Completed
Push — master ( 6ac893...01672b )
by Alejandro
22s queued 10s
created

.renderServers   A

Complexity

Conditions 3

Size

Total Lines 26
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 3.0052

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 26
rs 9.328
c 0
b 0
f 0
ccs 11
cts 12
cp 0.9167
cc 3
crap 3.0052
1
import { isEmpty, values } from 'ramda';
2
import React from 'react';
3
import { DropdownItem, DropdownMenu, DropdownToggle, UncontrolledDropdown } from 'reactstrap';
4
import PropTypes from 'prop-types';
5
import { serverType } from './prop-types';
6
7 5
const ServersDropdown = (serversExporter) => class ServersDropdown extends React.Component {
8 5
  static propTypes = {
9
    servers: PropTypes.object,
10
    selectedServer: serverType,
11
    listServers: PropTypes.func,
12
    history: PropTypes.shape({
13
      push: PropTypes.func,
14
    }),
15
  };
16
17 7
  renderServers = () => {
18 7
    const { servers: { list, loading }, selectedServer } = this.props;
19 7
    const servers = values(list);
20 7
    const { push } = this.props.history;
21 7
    const loadServer = (id) => push(`/server/${id}/list-short-urls/1`);
22
23 7
    if (loading) {
24 1
      return <DropdownItem disabled><i>Trying to load servers...</i></DropdownItem>;
25
    }
26
27 6
    if (isEmpty(servers)) {
28 1
      return <DropdownItem disabled><i>Add a server first...</i></DropdownItem>;
29
    }
30
31 5
    return (
32
      <React.Fragment>
33
        {servers.map(({ name, id }) => (
34 15
          <DropdownItem key={id} active={selectedServer && selectedServer.id === id} onClick={() => loadServer(id)}>
35
            {name}
36
          </DropdownItem>
37
        ))}
38
        <DropdownItem divider />
39
        <DropdownItem className="servers-dropdown__export-item" onClick={() => serversExporter.exportServers()}>
40
          Export servers
41
        </DropdownItem>
42
      </React.Fragment>
43
    );
44
  };
45
46 7
  componentDidMount = this.props.listServers;
47
48 7
  render = () => (
49 7
    <UncontrolledDropdown nav inNavbar>
50
      <DropdownToggle nav caret>Servers</DropdownToggle>
51
      <DropdownMenu right>{this.renderServers()}</DropdownMenu>
52
    </UncontrolledDropdown>
53
  );
54
};
55
56
export default ServersDropdown;
57